var sy = sy || {};

/**
 * 更改easyui加载panel时的提示文字
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 */
$.extend($.fn.panel.defaults, {
    loadingMessage: '加载中....'
});

/**
 * 更改easyui加载grid时的提示文字
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 */
$.extend($.fn.datagrid.defaults, {
    loadMsg: '数据加载中....'
});

/**
 * 防止panel/window/dialog组件超出浏览器边界
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 */
sy.onMove = {
    onMove: function (left, top) {
        var l = left;
        var t = top;
        if (l < 1) {
            l = 1;
        }
        if (t < 1) {
            t = 1;
        }
        var width = parseInt($(this).parent().css('width')) + 14;
        var height = parseInt($(this).parent().css('height')) + 14;
        var right = l + width;
        var buttom = t + height;
        var browserWidth = $(window).width();
        var browserHeight = $(window).height();
        if (right > browserWidth) {
            l = browserWidth - width;
        }
        if (buttom > browserHeight) {
            t = browserHeight - height;
        }
        $(this).parent().css({
            /* 修正面板位置 */
            left: l,
            top: t
        });
    }
};
$.extend($.fn.dialog.defaults, sy.onMove);
$.extend($.fn.window.defaults, sy.onMove);
$.extend($.fn.panel.defaults, sy.onMove);

/**
 * 扩展combobox在自动补全模式时，检查用户输入的字符是否存在于下拉框中，如果不存在则清空用户输入
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 */
$.extend($.fn.combobox.defaults, {
    onShowPanel: function () {
        var _options = $(this).combobox('options');
        if (_options.mode == 'remote') {/* 如果是自动补全模式 */
            var _value = $(this).combobox('textbox').val();
            var _combobox = $(this);
            if (_value.length > 0) {
                $.post(_options.url, {
                    q: _value
                }, function (result) {
                    if (result && result.length > 0) {
                        _combobox.combobox('loadData', result);
                    }
                }, 'json');
            }
        }
    },
    onHidePanel: function () {
        var _options = $(this).combobox('options');
        if (_options.mode == 'remote') {/* 如果是自动补全模式 */
            var _data = $(this).combobox('getData');
            /* 下拉框所有选项 */
            var _value = $(this).combobox('getValue');
            /* 用户输入的值 */
            var _b = false;
            /* 标识是否在下拉列表中找到了用户输入的字符 */
            for (var i = 0; i < _data.length; i++) {
                if (_data[i][_options.valueField] == _value) {
                    _b = true;
                }
            }
            if (!_b) {/* 如果在下拉列表中没找到用户输入的字符 */
                $(this).combobox('setValue', '');
            }
        }
    }
});

/**
 * 扩展combogrid在自动补全模式时，检查用户输入的字符是否存在于下拉框中，如果不存在则清空用户输入
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 */
$.extend($.fn.combogrid.defaults, {
    onShowPanel: function () {
        var _options = $(this).combogrid('options');
        if (_options.mode == 'remote') {/* 如果是自动补全模式 */
            var _value = $(this).combogrid('textbox').val();
            if (_value.length > 0) {
                $(this).combogrid('grid').datagrid("load", {
                    q: _value
                });
            }
        }
    },
    onHidePanel: function () {
        var _options = $(this).combogrid('options');
        if (_options.mode == 'remote') {/* 如果是自动补全模式 */
            var _data = $(this).combogrid('grid').datagrid('getData').rows;
            /* 下拉框所有选项 */
            var _value = $(this).combogrid('getValue');
            /* 用户输入的值 */
            var _b = false;
            /* 标识是否在下拉列表中找到了用户输入的字符 */
            for (var i = 0; i < _data.length; i++) {
                if (_data[i][_options.idField] == _value) {
                    _b = true;
                }
            }
            if (!_b) {/* 如果在下拉列表中没找到用户输入的字符 */
                $(this).combogrid('setValue', '');
            }
        }
    }
});

/**
 * 扩展validatebox，添加新的验证功能
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 */
$.extend($.fn.validatebox.defaults.rules, {
    eqPwd: {
        /* 验证两次密码是否一致功能 */
        validator: function (value, param) {
            return value == $(param[0]).val();
        },
        message: '密码不一致！'
    }
});

/**
 * 平滑格式转换器
 * @author 孙宇
 * @requires jQuery,EasyUI
 */
sy.easyuiDataPlainConverter = function (opt, data) {
    var idField, textField, parentField;
    if (opt.parentField) {
        idField = opt.idField || 'id';
        textField = opt.textField || 'text';
        parentField = opt.parentField || 'pid';
        var i, l, treeData = [], tmpMap = [];
        for (i = 0, l = data.length; i < l; i++) {
            tmpMap[data[i][idField]] = data[i];
        }
        for (i = 0, l = data.length; i < l; i++) {
            if (tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
                if (!tmpMap[data[i][parentField]]['children'])
                    tmpMap[data[i][parentField]]['children'] = [];
                data[i]['text'] = data[i][textField];
                tmpMap[data[i][parentField]]['children'].push(data[i]);
            } else {
                data[i]['text'] = data[i][textField];
                treeData.push(data[i]);
            }
        }
        return treeData;
    }
    return data;
};

/**
 * 扩展tree和combotree，使其支持平滑数据格式
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 *
 */
sy.loadFilter = {
    loadFilter: function (data, parent) {
        var opt = $(this).data().tree.options;
        return sy.easyuiDataPlainConverter(opt, data);
    }
};
$.extend($.fn.combotree.defaults, sy.loadFilter);
$.extend($.fn.tree.defaults, sy.loadFilter);

/**
 * 扩展treegrid，使其支持平滑数据格式
 *
 * @author 孙宇
 *
 * @requires jQuery,EasyUI
 *
 */
$.extend($.fn.treegrid.defaults, {
    loadFilter: function (data, parentId) {
        var opt = $(this).data().treegrid.options;
        return sy.easyuiDataPlainConverter(opt, data);
    }
});

/**
 * 更换主题
 *
 * @author 孙宇
 * @requires jQuery,EasyUI
 * @param themeName
 */
sy.changeTheme = function (themeName) {
    var $easyuiTheme = $('#easyuiTheme');
    var url = $easyuiTheme.attr('href');
    var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css';
    $easyuiTheme.attr('href', href);

    var $iframe = $('iframe');
    if ($iframe.length > 0) {
        for (var i = 0; i < $iframe.length; i++) {
            var ifr = $iframe[i];
            try {
                $(ifr).contents().find('#easyuiTheme').attr('href', href);
            } catch (e) {
                try {
                    ifr.contentWindow.document.getElementById('easyuiTheme').href = href;
                } catch (e) {
                }
            }
        }
    }

    sy.cookie('easyuiTheme', themeName, {
        expires: 7
    });
};